import re
import os
import argparse

def vtt_to_lrc(vtt_file_path, lrc_file_path):
    """
    将 VTT 文件转换为 LRC 文件。

    :param vtt_file_path: 输入的 VTT 文件路径
    :param lrc_file_path: 输出的 LRC 文件路径
    """
    with open(vtt_file_path, 'r', encoding='utf-8') as vtt_file:
        vtt_content = vtt_file.readlines()

    lrc_lines = []
    i = 0
    while i < len(vtt_content):
        line = vtt_content[i].strip()
        # 匹配时间戳行（例如：00:00:10.500 --> 00:00:13.000）
        timestamp_match = re.match(r'(\d{2}:\d{2}:\d{2}\.\d{3}) --> \d{2}:\d{2}:\d{2}\.\d{3}', line)
        if timestamp_match:
            # 提取起始时间戳
            start_time = timestamp_match.group(1)
            # 转换为 LRC 时间格式（[mm:ss.xx]）
            hours, minutes, seconds = start_time.split(':')
            seconds, milliseconds = seconds.split('.')
            total_seconds = int(hours) * 3600 + int(minutes) * 60 + int(seconds)
            lrc_time = f"[{minutes}:{seconds}.{milliseconds[:2]}]"
            # 下一行是文本内容
            if i + 1 < len(vtt_content):
                text_line = vtt_content[i + 1].strip()
                if text_line:
                    lrc_lines.append(f"{lrc_time} {text_line}")
                    i += 1  # 跳过文本行
        i += 1

    # 写入 LRC 文件
    with open(lrc_file_path, 'w', encoding='utf-8') as lrc_file:
        lrc_file.write('\n'.join(lrc_lines))

def batch_convert(input_path, output_path=None):
    """
    批量转换 VTT 文件为 LRC 文件。

    :param input_path: 输入文件或目录路径
    :param output_path: 输出目录路径（可选）
    """
    if os.path.isfile(input_path):
        # 单个文件转换
        if input_path.lower().endswith('.vtt'):
            if output_path:
                if os.path.isdir(output_path):
                    # 输出为目录
                    output_file = os.path.join(output_path, os.path.basename(input_path)[:-4] + '.lrc')
                else:
                    # 输出为文件
                    output_file = output_path
            else:
                # 自动生成输出文件名
                output_file = input_path[:-4] + '.lrc'
            vtt_to_lrc(input_path, output_file)
            print(f"转换完成: {input_path} -> {output_file}")
        else:
            print(f"警告: 输入文件 {input_path} 不是 .vtt 文件，跳过。")
    elif os.path.isdir(input_path):
        # 批量转换目录下的文件
        if output_path and not os.path.isdir(output_path):
            os.makedirs(output_path, exist_ok=True)

        for root, _, files in os.walk(input_path):
            for file in files:
                if file.lower().endswith('.vtt'):
                    vtt_file = os.path.join(root, file)
                    if output_path:
                        # 保持目录结构
                        rel_path = os.path.relpath(root, input_path)
                        output_dir = os.path.join(output_path, rel_path)
                        os.makedirs(output_dir, exist_ok=True)
                        # Remove ".mp3" if present, then remove ".vtt" and add ".lrc"
                        base_name = file
                        print(f"base_name: {base_name}")
                        if base_name.lower().endswith('.mp3.vtt'):
                            print(f"base_name: {base_name} contains .mp3.vtt")
                            base_name = base_name[:-8]  # Remove ".mp3.vtt"
                        elif base_name.lower().endswith('.vtt'):
                            base_name = base_name[:-4]  # Remove ".vtt"
                        lrc_file = os.path.join(output_dir, base_name + '.lrc')
                    else:
                        # 输出到原目录
                        # Remove ".mp3" if present, then remove ".vtt" and add ".lrc"
                        base_name = file
                        if base_name.lower().endswith('.mp3.vtt'):
                            print(f"base_name: {base_name} contains .mp3.vtt")
                            base_name = base_name[:-8]  # Remove ".mp3.vtt"
                        elif base_name.lower().endswith('.vtt'):
                            base_name = base_name[:-4]  # Remove ".vtt"
                        lrc_file = os.path.join(root, base_name + '.lrc')
                    vtt_to_lrc(vtt_file, lrc_file)
                    print(f"转换完成: {vtt_file} -> {lrc_file}")
    else:
        print(f"错误: 输入路径 {input_path} 不存在。")

def main():
    parser = argparse.ArgumentParser(description='将 VTT 文件转换为 LRC 文件。')
    parser.add_argument('-i', '--input', required=True, help='输入文件或目录路径')
    parser.add_argument('-o', '--output', help='输出文件或目录路径（可选）')
    args = parser.parse_args()

    batch_convert(args.input, args.output)

if __name__ == '__main__':
    main()
